package com.yc.snacknet_vue.biz.Impl;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.yc.snacknet_vue.biz.IOrderInfoBiz;
import com.yc.snacknet_vue.dao.IOrderInfoDAO;
import com.yc.snacknet_vue.dao.impl.OrderInfoDAOImpl;
import com.yc.snacknet_vue.utils.StringUtil;

/**
 * 订单业务实现类
 * @author UNO
 * @date 2021年8月13日
 * Email 2759451734@qq.com
 */
public class OrderInfoBizImpl implements IOrderInfoBiz {

	@Override
	public String add(String cnos, String ano, String totalPrice) {
		if(StringUtil.checkNull(cnos, ano, totalPrice)) {
			return "";
		}
		IOrderInfoDAO dao = new OrderInfoDAOImpl();
		return dao.add(cnos, ano, totalPrice);
	}

	@Override
	public List<Map<String, Object>> findByMno(String mno) {
		if(StringUtil.checkNull(mno)) {
			return Collections.emptyList();
		}
		IOrderInfoDAO dao = new OrderInfoDAOImpl();
		List<Map<String, Object>> list = dao.findByMno(mno); //但给你钱登录会员的订单信息
		if(null == list || list.isEmpty()) {
			return Collections.emptyList();
		}
		//存储处理好的订单书
		ArrayList<Map<String, Object>> result = new ArrayList<Map<String, Object>>();
		
		String proOno = String.valueOf(list.get(0).get("ono")); //获取第一个订单的订单编号
		String curOno = proOno; //当前订单
		
		//存储第一张订单的基本信息
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("ono", proOno); //订单编号
		map.put("odate", list.get(0).get("odate")); //订单日期
		map.put("amount", list.get(0).get("amount")); //订单总价
		map.put("status", list.get(0).get("status")); //订单状态
		
		List<Map<String, Object>> singleOrder = new ArrayList<Map<String,Object>>();
		Map<String, Object> singleProduct = null; //存单个商品
		
		for(Map<String, Object> rt : list) {  //循环查询出来的集合
			curOno = String.valueOf(rt.get("ono"));  //每次循环取出当前数据的订单号
			if(!proOno.equals(curOno)) {		//意味着这是一个新的订单 说明上一个订单已经循环完成
				proOno = curOno;
				map.put("goods", singleOrder); //将这个订单存储到map中
				result.add(map); //说明这个订单完成  加入结果集中
				
				//初始化订单数据  准备接受下一个订单信息
				singleOrder = new ArrayList<Map<String,Object>>();
				
				//准备存放下一个订单的基本信息
				map = new HashMap<String, Object>();
				map.put("ono", proOno); //订单编号
				map.put("odate", rt.get("odate")); //订单日期
				map.put("amount",  rt.get("amount")); //订单总价
				map.put("status",  rt.get("status")); //订单状态
			}
			//同一张订单的商品 获取这个订单对应的商品信息
			singleProduct = new HashMap<String, Object>(); //存入单个商品信息
			singleProduct.put("gno", rt.get("gno"));
			singleProduct.put("nums", rt.get("nums"));
			singleProduct.put("price", rt.get("price"));
			singleProduct.put("gname", rt.get("gname"));
			singleProduct.put("pics", rt.get("pics"));
			singleProduct.put("weight", rt.get("weight"));
			singleProduct.put("unit", rt.get("unit"));
			singleOrder.add(singleProduct); //说明当前的订单的商品已经循环完成 准备循环下一个商品
		}
		map.put("goods", singleOrder); //将这个订单信息存入map中
		result.add(map); //说明这个订单完成
		return result;

	}

	@Override
	public int update(String ono, Integer status) {
		if(StringUtil.checkNull(ono) || null == status) {
			return -1;
		}
		IOrderInfoDAO dao = new OrderInfoDAOImpl();
		return dao.update(ono, status);
	}

	@Override
	public int delete(String ono) {
		if(StringUtil.checkNull(ono)) {
			return -1;
		}
		IOrderInfoDAO dao = new OrderInfoDAOImpl();
		return dao.delete(ono);
	}

}
